/**
 * 管理埋点数据队列
 */
export class TrackerQueue {
  queue = []
  timer = ''
  listenerFlag = false
  interval = 1000 // 多久上报一次，ms
  reportCount = 50 // 每次上报多少条数据
  send = () => {
    console.error('TrackerQueue Error：初始化时未传递上报方法')
  }

  constructor({send}) {
    if (send) {
      this.send = send
    }
  }

  push(data) {
    // 添加数据
    this.queue.push(data)

    // 启动上报监听器
    this.startListener()
  }

  startListener() {
    if (this.listenerFlag) {
      return
    }
    this.listenerFlag = true
    this.timer = setInterval(() => {
      if (this.queue.length > 0) {
        this.report()
      } else {
        this.stopListener()
      }
    }, this.interval)
  }

  stopListener() {
    clearInterval(this.timer)
    this.listenerFlag = false
  }

  report() {
    if (typeof this.send === 'function') {
      this.send(this.queue.splice(0, this.reportCount))
    } else {
      console.error('TrackerQueue Error：缺少上报方法')
    }
  }

  /**
   * 销毁
   */
  destroy() {
    this.stopListener()
    if (this.queue.length > 0) {
      this.report()
    }
  }
}
